import pymysql

# 编程实现：循环输入10个人的信息（姓名，年龄，性别，身高），并存储到数据库中

# sql语句
# create   table  person(
# 	username  varchar(20),
# 	age   int,
# 	sex 	  char(4),
# 	high  double(3,2)     # 总共3位数字，2位小数
# )







class DButils:
    def __init__(self, host, user, password, database,  port = 3306, charset = 'utf8' ):
        """
           初始化数据库连接参数

           :param host: 数据库服务器地址
           :param user: 数据库登录用户名
           :param password: 数据库登录密码
           :param database: 要连接的数据库名称
           :param port: 数据库端口，默认为3306
           :param charset: 数据库字符集，默认为utf8
           """
        # 设置数据库服务器地址
        self.host = host
        # 设置数据库登录用户名
        self.user = user
        # 设置数据库登录密码
        self.password = password
        # 设置要连接的数据库名称
        self.database = database
        # 设置数据库端口
        self.port = port
        # 设置数据库字符集
        self.charset = charset

    def update(self, sql, data):
        """
        执行SQL更新操作。

        该方法使用提供的SQL语句和数据执行数据库更新操作。它负责建立数据库连接，
        执行SQL语句，并确保操作完成后关闭连接。

        参数:
        sql (str): 需要执行的SQL语句，可以包含占位符。
        data (tuple): 与SQL语句中的占位符对应的值，用于防止SQL注入。

        无返回值。
        """
        # 建立数据库连接
        conn = pymysql.connect(
            host=self.host,
            user=self.user,
            password=self.password,
            database=self.database,
            port=self.port,
            charset=self.charset
        )

        try:
            # 使用上下文管理器获取游标，自动管理资源
            with conn.cursor() as cursor:
                # 执行SQL语句，传入数据防止SQL注入
                cursor.execute(sql, data)
                # 提交事务，确保更改生效
                conn.commit()
                print("数据操作成功")
        except Exception as e:
            # 捕获异常，输出错误信息
            print("数据操作失败", e)
        finally:
            # 无论操作是否成功，都关闭数据库连接
            conn.close()

if __name__ == '__main__':
    db = DButils('localhost', 'root', '123456', 'hr_sql')
    sql = "insert into person(username, age, sex, high) values (%s, %s, %s, %s)"
    try :

        for i in range(5):
            print(f"这是第{i+1}条记录")
            name = input("请输入用户名：")
            age = int(input("请输入年龄："))
            sex = input("请输入性别：")
            high = float(input("请输入身高："))

            data = (name, age, sex, high)
            db.update(sql, data)
    except Exception as e:
        print("数据操作失败", e)






